﻿Cryptext x64 - Change Log
=========================

Consolidated English edition
Current development status: 0.11y dev28 fix3

This file consolidates the CHANGELOG files and relevant development README notes contained in the source package in chronological order. Very early internal builds before 0.2d do not have separate CHANGELOG files in the current package.


0.11y dev28 / fix1 through fix3
===============================

- Cryptext automatically creates the REG_DWORD value NoSkin as 0 under HKCU\Software\Cryptext64 if it is missing or invalid.
- NoSkin=0, or any value other than 1, uses the NC skin. NoSkin=1 enables the classic native Windows title bar and original main-window geometry on the next program start.
- dev28 initially adapted the virtual keyboard to the NC-skin geometry. fix1 was an intermediate build with an additional 9-pixel correction and was superseded by the following root-cause fix.
- fix2 accounts for Windows constraining a window at the monitor edge according to its invisible frame. The virtual keyboard may therefore place that frame outside the work area while its visible edge remains aligned with the main window.
- The same visible-edge calculation was applied to the "Change password" dialog.
- fix3 moves only the virtual keyboard 2 pixels to the right compared with fix2. The final shift and invisible-frame constants are both 7 pixels; the password dialog remains at 9 pixels.
- The visual test and recommended tests for dev28 fix3 were confirmed on September 20, 2026.
- The fix builds do not change CT64FILE V1, cryptography, or NoSkin behavior.


0.11y dev27 / fix1
==================

- The main window received its own compact 20-pixel title bar with the NC logo, color themes, pin control, and minimize and close buttons.
- Dragging the title bar moves the window; right-clicking opens the system menu. Double-clicking the NC logo changes the color theme.
- The previous roll-up function was removed.
- fix1 adds bitmap glyphs for Ä, Ö, Ü, ä, ö, ü, and ß to the custom title bar, removes the no-longer-needed width table, and consolidates brush management in a helper routine.
- It also corrects the password-label position by 1 pixel and the group frames by 3 pixels.


0.11y dev25 through dev26
=========================

- dev25 moved large work areas into the uninitialized BSS section to reduce the PE file size.
- dev26 consolidated text, data, and BSS areas and packed the shell artwork more efficiently.
- Cancellation during phase 3 was hardened so completed files are handled correctly and temporary files are reliably cleaned up.


0.11y dev22 through dev24 fix1
==============================

- dev22 stabilized small/large file ordering. Progress is grouped for up to 100 files; files of 400 MiB or larger are handled separately.
- dev23 removed WS_BORDER from the progress window.
- dev24 replaced the border with a flat presentation.
- dev24 fix1 corrected a critical Win64 calling error involving CallWindowProcW in the progress window.


0.11y dev20 through dev21
=========================

- dev20 restored the compact Cryptext 3.4-style main-window geometry at 232 x 106 dialog units with MS Sans Serif 8.
- Common Controls v6 and a lower-flicker progress display were integrated, and session-password adoption was corrected.
- dev21 corrected radio-control widths, clarified telemetry rules, and defined DPI handling.


0.11y dev19
===========

- The security notice for "Remember until Windows sign-out" was changed to a true tracking tooltip. While the pointer remains over the option, the long notice is intended to stay readable without an automatic time limit.
- Identical duplicate Explorer/IPC requests are no longer stored as an additional pending request.
- Duplicate detection compares operation, keep/delete-source setting, and the complete path list; the internal Explorer-origin marker is intentionally not treated as a meaningful difference.
- A genuinely different request can still wait as the single separate pending request.
- Explorer Quick Mode, Single Instance, the ground-password model, CT64FILE V1, and the safe file transaction remain unchanged.


0.11y dev18
===========

- Added session-only "Explorer Quick Mode (no confirmation)" to the tray menu.
- Quick Mode can be used only while a valid ground password is remembered until Windows sign-out, and the mode itself is never enabled persistently.
- The first activation shows a detailed security warning. The Activate button stays disabled until the user explicitly checks the acknowledgement box.
- Only the fact that the warning was acknowledged is persisted; Quick Mode itself is off again after a program/Windows restart.
- Quick Mode applies only to explicit Encrypt/Decrypt requests from Cryptext64Shell.dll. AUTO, drag & drop, and ordinary command-line requests keep the visible confirmation flow.
- If an encrypted file requires a different/older password, it is not silently decrypted successfully; Cryptext becomes visible and returns to the normal password/error flow.
- "Clear password from memory" immediately disables Quick Mode as well.
- Passwords, password hashes, and file keys are still never transferred to other processes through IPC.
- Minor radio-control width correction so the "Password Options" group frame is drawn cleanly.


0.11y dev17 / fix1
==================

- Restored the compact main-window width used by the previous stable layout.
- Made tooltip registration for the security notice more robust.
- Explorer restarts are detected through the registered Windows "TaskbarCreated" message; a tray-resident Cryptext automatically re-adds its notification icon afterward.
- If re-adding the tray icon fails, the main window is shown so Cryptext cannot remain unreachable in the background.
- fix1 removes accidentally introduced UTF-8 BOMs from assembler source files that FASM 1.73.35 would otherwise interpret as an illegal instruction.
- No change to CT64FILE V1 or cryptography.


0.11y dev14 through dev16
=========================

- Replaced the old process-lifetime option with "Remember until Windows sign-out".
- A validated ground password can remain only in the memory of the one running Cryptext64.exe for the current Windows session.
- With a valid session password, X/Alt+F4 hides the main window and keeps Cryptext running in the system tray.
- Tray menu: "Open Cryptext", "Clear password from memory", and "Exit Cryptext".
- Exiting with a remembered password warns that the session password will be lost; normal Windows sign-out/shutdown ends the process without an unnecessary prompt and wipes sensitive state during normal session termination.
- Later Explorer/command-line launches activate the existing instance; IPC still carries only mode, source options, and paths.
- "Do not keep in memory" immediately clears a remembered session password.
- The initially visible help "?" was removed again. The "Remember until Windows sign-out" text itself became the hover area for a detailed German/English security notice.


0.11y dev12 / dev13
===================

- Added a small optional RAM display for the Cryptext process itself.
- Display format: RAM: <PrivateUsage> / <WorkingSetSize> MiB.
- Hidden by default; Shift+Info toggles it for the current instance.
- A normal click on Info still opens the About dialog.
- While visible, the RAM display updates once per second; when hidden, no dedicated RAM-display timer runs.
- The display state is not persisted.


0.11y dev10 / dev11
===================

- Folder drag & drop gained an explicit mode chooser:
    Encrypt
    Decrypt
    Automatic
    Cancel
- If at least one folder is present in the dropped selection, the chosen processing mode applies to the entire selection.
- Choosing the mode does not start cryptography. Processing still begins only after OK in the main window.
- Encrypt processes ordinary files and skips existing .$#! files.
- Decrypt processes only .$#! files.
- Automatic retains suffix-based processing.


0.11y dev8 / dev9
=================

- The virtual keyboard now follows the selected language: German QWERTZ, English QWERTY; Y/Z are swapped accordingly, including randomized layouts.
- Editing a remembered password was corrected: the field can be backspaced all the way to length 0 without the remembered bullets automatically reappearing.
- A different/old file password can be entered for decryption without replacing the separately remembered ground password.


0.11y dev6 / dev7
=================

- Added Single Instance behavior: at most one normal Cryptext64.exe runs per interactive Windows session.
- Later launches transfer only operation, keep/delete-source setting, and paths, then exit.
- Passwords, password hashes, vault secrets, and file keys are not transferred between processes.
- While one request is active, exactly one genuinely different request may wait separately.
- "Change password..." was redesigned as a self-contained three-field dialog:
    Current password
    New password
    Repeat new password
- The current ground password is verified locally before the new ground-password verifier is accepted.
- Files already encrypted keep the password with which they were created.


0.11y dev1 through dev5
=======================

- Added a fixed Cryptext ground-password model following the usability principle of classic Cryptext 3.4.
- If no ground password exists, a two-field setup dialog requests the password and its confirmation.
- Setup is offered at program startup; cancelling still allows Cryptext to start for decrypt-only use.
- Later encryption is checked against the local ground-password verifier before processing begins. A wrong password creates no temporary file and changes no user file.
- Decryption deliberately remains open to old passwords, files from other installations, and legacy files.
- The local verifier does not store the plaintext password; salt/verifier data is protected locally.
- Improved messages for missing/renamed files, access denied, and the special case "encryption succeeded but the original file could not be deleted".
- Password/PIN dialogs received consistent light dialog backgrounds and white input fields.


0.11x / fix1 / fix2 / fix3
==========================

- Added recursive folder encryption and decryption.
- Explorer folder context menu provides Encrypt and Decrypt commands.
- Every file remains an independent safe transaction; no folder-container format is created.
- Reparse points, junctions, and symbolic links are deliberately not followed.
- Large recursive selections use a dynamic VirtualAlloc-backed file list; folders with more than 2,000 files were successfully processed.
- Folder-enumeration errors such as ERROR_ACCESS_DENIED are handled separately from ordinary per-file access errors.
- Since fix3, drag & drop also accepts folders and mixed file/folder selections.
- Added a fourth switchable .$#! file-icon variant: BeOS v4. The About cycle now contains classic key, AES v2, AES v3, and BeOS v4.
- CT64FILE V1, modern AES-256-GCM/PBKDF2 cryptography, and the confirmed Cryptext 3.x/3.4 decrypt-only path remain unchanged.


0.11w fix1
==========

- Small UI/text correction patch on top of 0.11w.
- Fixed the About icon by using the correct STATIC message, STM_SETIMAGE.
- About OK button now uses the same flat style as the main-window buttons.
- Removed obsolete user-visible "0.10a test" wording from file-operation errors.
- Format error text now correctly mentions both CT64FILE V1 and legacy Cryptext 3.x/3.4 decryption.
- Updated English legacy/password helper text.
- No changes to CT64FILE V1, cryptography, vault logic, file transactions, or the legacy algorithm.


0.11w
=====

- Replaced the old Info MessageBox with a native modal About dialog.
- Layout intentionally recalls Cryptext 3.4, with icon, text, and OK button.
- Hidden Easter egg: clicking the About icon cycles through three embedded file-icon variants.
- The selected icon variant is stored in HKCU and applied to the .$#! Explorer file type.
- SHChangeNotify is used to request an Explorer icon refresh.
- Installer preserves the selected icon variant across updates/reinstallation.
- Batch-completion wording made version-neutral.
- The confirmed Cryptext 3.x/3.4 decrypt-only path from 0.11v fix2 is retained and was tested with several genuine file sizes.
- Modern encryption remains CT64FILE V1.


0.11v / 0.11v fix2
===================

- Added the first decrypt-only compatibility path for original Cryptext 3.x/3.4 files.
- .$#! files without CT64FILE magic are checked as possible legacy files.
- Reconstructed historical algorithm: SHA-1 + RC4.
- Historical layout: ciphertext + 12 bytes per-file data + 20-byte password check value.
- Legacy files still use the modern transaction-safe output pipeline: read-only source, hidden temp file, FlushFileBuffers, second on-disk decrypt/byte comparison, WRITE_THROUGH rename, and only then optional source deletion.
- Legacy format is never written.
- Important: the old file body has no modern complete MAC/AEAD integrity protection.
- fix2 corrected SHA-1 byte/word ordering to reproduce the original Cryptext 3.4 little-endian digest-word representation.
- fix2 was confirmed with genuine Cryptext 3.4 files and multiple passwords.


0.11u
=====

- UI polish for the DE|EN pixel switch.
- "Change password" dialog is clamped to the monitor work area.
- Caret placement in the two new password fields is corrected after bullet-display updates.
- No change to file cryptography, CT64FILE V1, vault A/B, or file transactions.


0.11t / compile fix1
====================

- Added German/English language switching.
- Small DE|EN control in the main window; preference stored best effort under HKCU.
- Main window, vault menus, drag/drop title, About, file selection, progress window, vault dialogs, virtual keyboard, error/batch messages, and Explorer context menu became switchable.
- Cryptext defaults to German if the preference is missing or invalid.
- Shell DLL rereads the language preference while creating the context menu; no Explorer restart is required just to switch language.
- compile fix1 corrected a FASM 1.73.35 macro/local-label interaction without changing runtime logic, cryptography, format, or UI behavior.


0.11s
=====

- "Change password..." became functional.
- It changes only the long Cryptext password stored in the local vault.
- Existing .$#! files are not re-encrypted and still require the password with which they were originally encrypted.
- Flow: authenticate vault PIN, enter the new long password twice, write a new A/B vault slot.
- A/B update writes generation+1 to the opposite slot, reads it back, and fully authenticates it before accepting the new generation.
- Password and PIN data remain in the intended protected buffers; any remembered old session password is wiped after a successful change.
- Minor UI wording/layout corrections.


0.11r
=====

- Installer made robust for package/source paths containing parentheses.
- First installation detects that no installed shell DLL exists and avoids an unnecessary Explorer restart.
- Update path removes old shell registration, stops Explorer if needed to unload the old in-process DLL, and restarts Explorer only if it had been running.
- Installation remains per-user under HKCU and does not require administrator rights.


0.11q
=====

- Improved positioning of the randomized vault keypad.
- Preferred positions: right, left, below, then above the PIN dialog.
- Final position is clamped to the nearest monitor work area.
- PIN/bullet display therefore remains visible whenever possible.
- No change to vault cryptography, CT64FILE V1, or file transactions.


0.11p / FASM compile fix2
=========================

- Added randomized on-screen numeric keypad for the vault PIN.
- Digits 0-9 are reshuffled with BCryptGenRandom every time the keypad opens.
- Clicks append digits directly to the protected PIN buffer; no simulated keyboard events.
- Removed the system menu from the progress window so a modal Windows menu loop cannot pause active processing.
- Fully successful batches no longer require an extra success MessageBox; warning/error/cancel summaries remain.
- FASM compile fix2 added explicit qword sizes for HWND-array stores; no runtime or cryptographic behavior changed.


0.11o
=====

- Successful single-file operations now finish without an extra development/success MessageBox.
- The progress dialog closes and Cryptext returns directly to the main UI.
- Errors, wrong password, tampering, collisions, disk-full errors, cancellation, and finalization warnings remain visible.
- Cryptography, vault, CT64FILE V1, and transaction logic unchanged.


0.11n
=====

- Added dedicated modal "Set up vault" dialog.
- Added dedicated modal "Unlock vault" dialog.
- Setup accepts a 4- to 6-digit PIN plus confirmation.
- Unlock loads the long Cryptext password into SecureInput only after successful DPAPI/PBKDF2/AES-GCM authentication.
- PIN edit controls display bullets only; actual PIN data stays in the best-effort VirtualLock-protected vault workspace.
- Paste/Cut/Clear are blocked.
- Cancelling setup restores the previously staged long password to the protected main SecureInput buffer.


0.11m
=====

- First productive VaultA/VaultB implementation.
- The real long Cryptext password can be stored in a versioned VLT1 REG_BINARY blob and unlocked again.
- Construction: Current-User DPAPI DeviceSecret, PBKDF2-HMAC-SHA-256, 256-bit KEK, random 256-bit VaultKey, and two AES-256-GCM layers.
- VaultA generation 1 is written, reread, byte-compared, and fully cryptographically validated.
- Existing VaultA/VaultB values are never silently overwritten during setup.
- CT64FILE V1 and the file-cryptography path remain unchanged.


0.11l
=====

- Added persistent A/B vault development test under HKCU\Software\Cryptext64\Vault.
- VaultTestA/VaultTestB values are structurally and cryptographically validated.
- Generation counters are considered only after successful DPAPI/PBKDF2/GCM validation.
- New slots are reread, byte-compared, and fully authenticated after registry writes.
- Prepared the later productive VaultA/VaultB implementation.


0.11k
=====

- Added isolated PIN/DPAPI/PBKDF2/AES-GCM cryptographic test for the planned vault.
- 4- to 6-digit PIN; KDF salt material combines public salt with a Current-User DPAPI DeviceSecret.
- 256-bit KEK and random 256-bit VaultKey.
- AES-256-GCM wrapping and deliberate tag-corruption rejection test.
- All involved key/secret material stays in the private vault workspace and is wiped afterward.
- No productive registry storage yet.


0.11j
=====

- First isolated vault foundation.
- Added vault module, HKCU path, and A/B blob structure.
- Versioned vault blob V1 with generation, KDF/cipher IDs, salt, nonces, tags, DPAPI section, and variable password ciphertext length.
- 20 KiB workspace through VirtualAlloc, VirtualLock best effort.
- Random 256-bit DeviceSecret and Current-User DPAPI helpers.
- Not yet connected to the file-encryption path.


0.11i
=====

- Added compact About dialog with developer/FASM information.
- No change to file, shell, or cryptographic logic.


0.11h
=====

- Added drag & drop for one or more files onto the main window.
- Dropped files reuse the existing Auto/Batch processing path; no second cryptographic implementation.
- Mixed ordinary and .$#! files are supported.
- Folder drops are intentionally rejected.
- Added "Always on Top" to the native window system menu.
- Late drop events are discarded during an active file transaction so the current batch list cannot be replaced.


0.11g
=====

- Removed emoji lock glyphs from Explorer menu text.
- Replaced them with real color, DPI-aware menu bitmaps from 16/32/64-pixel resources.
- If bitmap creation fails, the text menu command remains functional.
- No password, cryptography, or file-operation path was added to the Explorer process.


0.11f
=====

- Explorer commands initially gained lock symbols in their text for Encrypt/Decrypt.
- Mixed selection remained "Cryptext".
- Cryptography and file operations unchanged.
- This text-emoji approach was replaced by real bitmaps in 0.11g.


0.11e
=====

- Corrected the visual spacing of the "+ Disk-Sync" status indication.
- First progress-status line is drawn in one shared GDI text area so the intended spacing can be controlled exactly.
- Disk-sync pulse logic, double-click association, and cryptography unchanged.


0.11d
=====

- "+ Disk-Sync" position is calculated from the actual GUI font metrics.
- .$#! file type gains an open command: double-click launches Cryptext64.exe --decrypt "%1".
- Actual decryption still begins only after password entry and OK confirmation.


0.11c
=====

- Renamed "+ Sync" to "+ Disk-Sync" and moved it closer to the first status line.
- Installer update logic improved: Explorer can be stopped to unload the old shell DLL, then the new build is copied/registered and Explorer restarted.
- Cryptography and CT64FILE V1 unchanged.


0.11b
=====

- Progress dialog now shows a pulsing "+ Sync" indicator while waiting for FlushFileBuffers.
- File and cryptographic logic unchanged.


0.11a
=====

- Added per-user .$#! file-type registration and Cryptext file icon; extension remains visible.
- Progress window prefers a position to the right of the password dialog, then left.
- FlushFileBuffers moved to a small helper thread while the main UI continues pumping messages.
- Prevents a "Not Responding" appearance during long disk-sync periods on large files.
- Falls back to synchronous FlushFileBuffers if CreateThread fails.
- Transaction order and cryptography unchanged.


0.11
====

- Added first native x64 Explorer shell extension.
- Classic COM implementation using IClassFactory, IShellExtInit, and IContextMenu.
- Explorer supplies file paths; DLL starts the existing EXE command-line bridge.
- No passwords or cryptographic state in the Explorer process.
- Context-sensitive command: ordinary files Encrypt, .$#! files Decrypt, mixed selection Cryptext/Auto.
- Per-user HKCU registration without administrator rights.
- EXE and shell DLL copied to %LOCALAPPDATA%\Cryptext64.


0.10a
=====

- Added compact telemetry for longer file operations.
- Displays file size, smoothed MiB/s throughput, and approximate ETA with overall percentage.
- Progress-window size remains unchanged.
- Files >=400 MiB show size immediately; smaller slow operations may opt in dynamically.
- Throughput updates at most once per second with simple smoothing.
- During phase 1, ETA includes the later full on-disk verification pass.
- Cryptography and transaction order unchanged.


0.10
====

- Added command-line/Explorer dispatch bridge.
- Modes: --auto, --encrypt, --decrypt.
- Source-retention overrides: --keep-original, --delete-source.
- Windows-correct command-line parsing through CommandLineToArgvW.
- Paths from different directories are copied into a Cryptext-owned full-path list.
- Cryptography never starts automatically from command-line parsing; password dialog and OK remain mandatory.
- Invalid options fall back to manual mode.


0.9b
====

- Cosmetic polish for the progress dialog.
- File path moved slightly, status font reduced, and phase lines arranged more compactly.
- Progress math, batch behavior, cancellation, and CT64FILE V1 unchanged.


0.9a
====

- Fixed the per-file progress-position bug from 0.9.
- Progress dialog made more compact and visually closer to Cryptext 3.
- Flat Cancel button.
- Native smooth green progress bar.
- Cryptography and transaction logic unchanged.


0.9
===

- Added classic Win32 progress window.
- Shows "file x of y", current path, and three transaction phases.
- Progress mapping covers write/decrypt, on-disk verification, and final commit.
- Added cooperative cancellation at authenticated record boundaries.
- Cancellation is disabled once the short safe commit phase begins.
- Added specific errors for access denied, sharing violation, write protection, collision, disk full, format, verification, and GCM authentication.
- Batches can continue after individual errors and receive a final status summary.


0.8a
====

- Improved bullet display for remembered session passwords without copying password characters back into the edit control.
- Added multi-select support to the Windows file dialog.
- One active password can be reused for a complete batch.
- Each item independently dispatches to encrypt/decrypt based on suffix.
- Failures are counted and do not necessarily stop later items.
- Added final multi-selection summary.


0.8
===

- "Keep original file" now works symmetrically for encryption and decryption.
- Source is deleted only after complete verification, commit, and metadata restoration.
- Enabled process-session option "remember until Cryptext exits".
- Session password occupies a separate part of the best-effort locked memory page.
- Active operation password is still wiped after each operation.
- Authentication failure can wipe the session cache and force manual re-entry.


0.7
===

- Added first complete modern CT64FILE-V1 decryption transaction.
- .$#! selection dispatches to decrypt.
- Hidden plaintext temp file with CREATE_NEW; no overwrite of existing destination.
- Metadata is authenticated before creating the plaintext temp file.
- Stored chunk size is honored within the 64 KiB..64 MiB reader range.
- Added reader-side PBKDF2 iteration resource cap.
- After initial decrypt+flush, a second full GCM pass compares plaintext temp bytes.
- Wrong password or corruption removes partial temp output and preserves the .$#! source.


0.6
===

- "Keep original file" checkbox became functional.
- Optional source deletion happens only after complete on-disk verification, rename, timestamp restoration, and attribute application.
- Failure to delete the source does not destroy the already verified output.
- Final encrypted file receives the source timestamps.


0.5b
====

- Retained the complete 0.5a on-disk verification.
- Added separate temp and final .$#! paths.
- Existing destination file is rejected before expensive cryptographic work.
- Commit only after successful verification via MoveFileExW(MOVEFILE_WRITE_THROUGH).
- Hidden temp attribute is prevented from leaking unintentionally to ordinary final files.


0.5a
====

- Added complete post-write on-disk verification.
- Temp file is closed after flush and reopened from disk.
- Header and exact expected size are checked again.
- PBKDF2 is run again from the values actually reread from the file.
- Metadata and data records are GCM-authenticated and byte-compared with the still untouched source.
- Verification failure removes the generated temp file.


0.5
===

- Added first real CT64FILE-V1 file writer.
- Source file opened read-only.
- Output initially created as hidden source.ext.$#!.temp with CREATE_NEW.
- PBKDF2-HMAC-SHA-256 writer policy set to 600,000 iterations.
- AES-256-GCM metadata record and 4 MiB data records.
- Fresh 16-byte salt and 8-byte nonce prefix from BCryptGenRandom.
- Metadata stores timestamps and restorable file attributes.
- FlushFileBuffers and exact expected file-size check.
- Work buffers/key material wiped before release.
- No final rename and no decryption yet in this build.


0.4a
====

- Froze CT64FILE V1.
- Defined 72-byte fixed header and 48-byte encrypted metadata layout.
- Exact UTF-16LE password-encoding rule without NUL/normalization.
- Froze nonce, AAD, and record byte ordering.
- Writer default set to 600,000 PBKDF2 iterations stored per file.
- Published deterministic interoperability test vector.
- No real user-file I/O yet.


0.4
===

- Added first executable cryptographic core in RAM.
- PBKDF2-HMAC-SHA-256 through Windows BCryptDeriveKeyPBKDF2.
- AES-256-GCM through Windows CNG.
- Fresh salt and GCM nonce through BCryptGenRandom.
- Authenticated Additional Data in the test record.
- Encrypt->decrypt->byte comparison in RAM.
- Deliberately corrupted tag must be rejected with AUTH_TAG_MISMATCH.
- Removed old fixed SecureInput SHA-256 diagnostic.
- The 10,000 PBKDF2 count used here was only for the quick RAM self-test.


0.3i
====

- Virtual-keyboard UI polish.
- DT_NOPREFIX allows literal "&" display.
- Bullet-display caret explicitly moved to the end.
- No change to SecureInput, randomization, or protection mechanisms.


0.3h
====

- Added deterministic SecureInput correctness test.
- Private UTF-16LE SecureInput buffer checked with CNG SHA-256.
- Fixed test vector Test0815$#!.
- SecureInput wiped after diagnostic result.
- No real file cryptography yet.


0.3g
====

- Virtual keyboard again starts in canonical QWERTZ layout.
- Added manual randomize/shuffle control.
- Every click creates a fresh Fisher-Yates permutation using BCryptGenRandom.
- Shift, Backspace, Space, and Randomize stay fixed.
- Existing password contents survive reshuffling.


0.3f
====

- Added first actual virtual-keyboard character-position randomization.
- 40 character slots shuffled with Fisher-Yates and BCryptGenRandom.
- RNG failure falls back to canonical QWERTZ.
- No synthetic keyboard events.


0.3e
====

- Separated visible keyboard-slot position from symbol meaning internally.
- Added runtime Slot->SymbolID mapping.
- Prepared safe randomization without rewriting SecureInput or hit-testing logic.


0.3d
====

- Shift and Backspace no longer trigger unnecessary label/mouse-pointer concealment.
- Only password-producing keys are treated as sensitive; Space remains sensitive.
- Existing concealment interval for sensitive clicks retained.


0.3c
====

- Added virtual Shift key without synthetic OS keyboard events.
- One-shot Shift.
- German QWERTZ/number-row Shift mapping.
- SymbolID remains independent of position and Shift state.


0.3b
====

- Virtual keyboard now hides the mouse pointer during sensitive clicks in addition to key labels.
- Labels/pointer return only after at least 140 ms and mouse-button release.
- Uses SetCursor(NULL), avoiding ShowCursor counter changes.
- Capture protection remains best effort.


0.3a
====

- FASM 1.73.35 compatibility corrections in virtual-keyboard code.
- No functional or layout change.


0.3
===

- Added first functional custom virtual keyboard as a separate top-level window.
- Custom GDI drawing; no native BUTTON child controls.
- No SendInput/keybd_event/synthetic keyboard messages.
- Dedicated SecureInput path.
- Keyboard follows the password dialog and is clamped to the monitor work area.
- WDA_EXCLUDEFROMCAPTURE best effort.
- No file encryption/decryption yet.


0.2d
====

- Added flat button style for OK, Cancel, Change password, and Info.
- Corrected README version typo.
- File encryption/decryption was still disabled in this early UI build.


END
===

Current status: Cryptext x64 0.11y dev19
See README-EN.txt for installation, usage, security model, legacy notes, and roadmap.
